#ifndef __V_TRACKING_H
#define __V_TRACKING_H

#ifdef __cplusplus
 extern "C" {
#endif
	 /*----------------------------------------------------------------------------------------------*/
	#include "misc.h"
	 
// Dinh nghia phan cung GPS
#define GPS_USART_BAUDRATE 				9600
#define GPS_USART									UART4
#define GPS_USART_GPIO						GPIOC
#define GPS_USART_CLOCK						RCC_APB1Periph_UART4
#define GPS_USART_GPIO_CLK				RCC_APB2Periph_GPIOC
#define GPS_USART_TX							GPIO_Pin_11 		//TX cua GPS noi voi RX cua stm32f103 va nguoc lai
#define GPS_USART_RX							GPIO_Pin_10	
	 
// Dinh nghia phan cung GSM
#define GSM_USART_BAUDRATE 				9600
#define GSM_USART									UART5
#define GSM_USART_TX_GPIO					GPIOD
#define GSM_USART_RX_GPIO					GPIOC
#define GSM_USART_CLOCK						RCC_APB1Periph_UART5
#define GSM_USART_TX_GPIO_CLK			RCC_APB2Periph_GPIOD
#define GSM_USART_RX_GPIO_CLK			RCC_APB2Periph_GPIOC	 
#define GSM_USART_TX							GPIO_Pin_2 		//TX cua GSM noi voi RX cua stm32f103 va nguoc lai
#define GSM_USART_RX							GPIO_Pin_12	 


// Dinh nghia phan cung COM
#define PC_USART_BAUDRATE 				115200
#define PC_USART									USART3
#define PC_USART_GPIO							GPIOB
#define PC_USART_CLOCK						RCC_APB1Periph_USART3
#define PC_USART_GPIO_CLK					RCC_APB2Periph_GPIOB
#define PC_USART_TX								GPIO_Pin_11 		
#define PC_USART_RX								GPIO_Pin_10	

// Dinh nghia phan cung Printer, Su dung USART3 cho ca giao tiep voi PC va Printer (default la COM, bam nut SWTICH thi chuyen sang Printer)
#define PRINTER_USART_BAUDRATE 		9600
#define PRINTER_USART							USART3
#define PRINTER_USART_GPIO				GPIOB
#define PRINTER_USART_CLOCK				RCC_APB1Periph_USART3
#define PRINTER_USART_GPIO_CLK		RCC_APB2Periph_GPIOB
#define PRINTER_USART_TX					GPIO_Pin_11 		
#define PRINTER_USART_RX					GPIO_Pin_10
	
// Dinh nghia phan cung RFID
#define RFID_USART_BAUDRATE 			9600
#define RFID_USART								USART2
#define RFID_USART_GPIO						GPIOA
#define RFID_USART_CLOCK					RCC_APB2Periph_USART1
#define RFID_USART_GPIO_CLK				RCC_APB2Periph_GPIOA
#define RFID_USART_TX							GPIO_Pin_3		
#define RFID_USART_RX							GPIO_Pin_2

//Dinh nghia phan cung CAMERA
#define CAM_USART_BAUDRATE 				9600
#define CAM_USART									USART1
#define CAM_USART_GPIO						GPIOB
#define CAM_USART_CLOCK						RCC_APB2Periph_USART1
#define CAM_USART_GPIO_CLK				RCC_APB2Periph_GPIOB
#define CAM_USART_TX							GPIO_Pin_7 		
#define CAM_USART_RX							GPIO_Pin_6

// Dinh nghia phan cung SD Card/ Serial Data Flash
#define SD_DF_SPI									SPI1
#define SD_DF_SPI_GPIO						GPIOB
#define SD_DF_SPI_CLOCK						RCC_APB2Periph_SPI1
#define SD_DF_SPI_GPIO_CLK				RCC_APB2Periph_GPIOB
#define SD_DF_SPI_MOSI						GPIO_Pin_5
#define SD_DF_SPI_MISO						GPIO_Pin_4
#define SD_DF_SPI_SCK					    GPIO_Pin_3

//define AI for ADC
#define AI_Vin_GPIO								GPIOB
#define AI_Vin										GPIO_Pin_1
#define AI_Vbat_GPIO							GPIOC
#define AI_Vbat										GPIO_Pin_3

//define DI for power button
#define DI_BAT_PWR_GPIO						GPIOA
#define DI_BAT_PWR								GPIO_Pin_11
#define EXTI_BAT_PWR_PORT					GPIO_PortSourceGPIOA
#define EXTI_BAT_PWR_Pin					GPIO_PinSource11
#define EXTI_BAT_PWR_Line					EXTI_Line11
#define EXTI_BAT_PWR_IRQn					EXTI15_10_IRQn
//define DI for gsm

#define DI_GSM_RI_GPIO						GPIOB
#define DI_GSM_RI									GPIO_Pin_9
#define EXTI_DI_GSM_RI_PORT				GPIO_PortSourceGPIOB
#define EXTI_DI_GSM_RI_Pin				GPIO_PinSource9
#define EXTI_DI_GSM_RI_Line				EXTI_Line9
#define EXTI_DI_GSM_RI_IRQn				EXTI9_5_IRQn
#define DI_GSM_STATUS_GPIO				GPIOB
#define DI_GSM_STATUS							GPIO_Pin_2

#define DI_GSM_SIM_DECT_GPIO			GPIOC
#define DI_GSM_SIM_DECT						GPIO_Pin_7
//define DI for printer
#define DI_PRINTER_SWITCH_GPIO		GPIOC
#define DI_PRINTER_SWITCH					GPIO_Pin_6
#define EXTI_PRINTER_SW_PORT			GPIO_PortSourceGPIOC
#define EXTI_PRINTER_SW_Pin				GPIO_PinSource6
#define EXTI_PRINTER_SW_Line			EXTI_Line6
#define EXTI_PRINTER_SW_IRQn			EXTI9_5_IRQn
//define DI for RFID
#define DI_RFID_OVL_GPIO					GPIOB
#define DI_RFID_OVL								GPIO_Pin_14
//define DI for CAM
#define DI_CAM_OVL_GPIO						GPIOB
#define DI_CAM_OVL								GPIO_Pin_12
//define DI for SD card
#define DI_SD_DECT_GPIO						GPIOC
#define DI_SD_DECT								GPIO_Pin_8
//define DI for reserve
#define DI_RESERVE_1_GPIO					GPIOA
#define DI_RESERVE_1							GPIO_Pin_7
#define DI_RESERVE_2_GPIO					GPIOC
#define DI_RESERVE_2							GPIO_Pin_4
#define DI_RESERVE_3_GPIO					GPIOC
#define DI_RESERVE_3							GPIO_Pin_5
#define DI_RESERVE_4_GPIO					GPIOB
#define DI_RESERVE_4							GPIO_Pin_0
//define DO Status indication
#define DO_GPS_STATUS_GPIO				GPIOC
#define DO_GPS_STATUS							GPIO_Pin_13
#define GPS_LED_OFF()							GPIO_SetBits(DO_GPS_STATUS_GPIO, DO_GPS_STATUS)
#define GPS_LED_ON()							GPIO_ResetBits(DO_GPS_STATUS_GPIO, DO_GPS_STATUS)
#define DO_GSM_STATUS_GPIO				GPIOC
#define DO_GSM_STATUS							GPIO_Pin_2
#define GSM_LED_OFF()							GPIO_SetBits(DO_GSM_STATUS_GPIO, DO_GSM_STATUS)
#define GSM_LED_ON()							GPIO_ResetBits(DO_GSM_STATUS_GPIO, DO_GSM_STATUS)
#define DO_SD_STATUS_GPIO					GPIOC
#define DO_SD_STATUS							GPIO_Pin_1
#define SD_LED_OFF()							GPIO_SetBits(DO_SD_STATUS_GPIO, DO_SD_STATUS)
#define SD_LED_ON()								GPIO_ResetBits(DO_SD_STATUS_GPIO, DO_SD_STATUS)
#define DO_DEV_STATUS_GPIO				GPIOC
#define DO_DEV_STATUS							GPIO_Pin_0
#define DEV_LED_OFF()							GPIO_SetBits(DO_DEV_STATUS_GPIO, DO_DEV_STATUS)
#define DEV_LED_ON()							GPIO_ResetBits(DO_DEV_STATUS_GPIO, DO_DEV_STATUS)
//define DO for maitaining power when external power is lost
#define DO_DEV_PWR_GPIO						GPIOA
#define DO_DEV_PWR								GPIO_Pin_4
#define PWR_HOLD_ON()							GPIO_SetBits(DO_DEV_PWR_GPIO, DO_DEV_PWR)
#define PWR_HOLD_OFF()						GPIO_ResetBits(DO_DEV_PWR_GPIO, DO_DEV_PWR)
//define DO for gps
#define DO_GPS_PWR_GPIO						GPIOC
#define DO_GPS_PWR								GPIO_Pin_9
#define GPS_PWR_ON()							GPIO_SetBits(DO_GPS_PWR_GPIO, DO_GPS_PWR)
#define GPS_PWR_OFF()							GPIO_ResetBits(DO_GPS_PWR_GPIO, DO_GPS_PWR)
#define DO_GPS_RESET_GPIO					GPIOA
#define DO_GPS_RESET							GPIO_Pin_10	
#define GPS_RESET_HIGH()					GPIO_SetBits(DO_GPS_RESET_GPIO, DO_GPS_RESET)
#define GPS_PWR_LOW()							GPIO_ResetBits(DO_GPS_RESET_GPIO, DO_GPS_RESET)
//define DO for gsm
#define DO_GSM_PWR_GPIO						GPIOA
#define DO_GSM_PWR								GPIO_Pin_5
#define GSM_PWR_ON()							GPIO_SetBits(DO_GSM_PWR_GPIO, DO_GSM_PWR)
#define GSM_PWR_OFF()							GPIO_ResetBits(DO_GSM_PWR_GPIO, DO_GSM_PWR)
#define DO_GSM_PWRKEY_GPIO				GPIOB
#define DO_GSM_PWRKEY							GPIO_Pin_8
#define GSM_PWRKEY_ON()						GPIO_SetBits(DO_GSM_PWRKEY_GPIO, DO_GSM_PWRKEY)
#define GSM_PWRKEY_OFF()					GPIO_ResetBits(DO_GSM_PWRKEY_GPIO, DO_GSM_PWRKEY)
#define DO_GSM_DTR_GPIO						GPIOA
#define DO_GSM_DTR								GPIO_Pin_8
#define GSM_DTR_ON()							GPIO_SetBits(DO_GSM_DTR_GPIO, DO_GSM_DTR)
#define GSM_DTR_OFF()							GPIO_ResetBits(DO_GSM_DTR_GPIO, DO_GSM_DTR)
//define DO for rfid

#define DO_RFID_PWR_GPIO					GPIOB
#define DO_RFID_PWR								GPIO_Pin_15
#define RFID_PWR_ON()							GPIO_SetBits(DO_RFID_PWR_GPIO, DO_RFID_PWR)
#define RFID_PWR_OFF()						GPIO_ResetBits(DO_RFID_PWR_GPIO, DO_RFID_PWR)
//define DO for camera
#define DO_CAM_PWR_GPIO						GPIOB
#define DO_CAM_PWR								GPIO_Pin_13
#define CAM_PWR_ON()								GPIO_SetBits(DO_CAM_PWR_GPIO, DO_CAM_PWR)
#define CAM_PWR_OFF()								GPIO_ResetBits(DO_CAM_PWR_GPIO, DO_CAM_PWR)
//define DO for SD card
#define DO_SD_PWR_GPIO						GPIOA
#define DO_SD_PWR									GPIO_Pin_13
#define SD_PWR_ON()								GPIO_SetBits(DO_SD_PWR_GPIO, DO_SD_PWR)
#define SD_PWR_OFF()								GPIO_ResetBits(DO_SD_PWR_GPIO, DO_SD_PWR)
#define DO_SD_CS_GPIO							GPIOA
#define DO_SD_CS									GPIO_Pin_14
#define SD_SELECT()								GPIO_ResetBits(DO_SD_CS_GPIO,DO_SD_CS);
#define SD_UNSELECT()							GPIO_SetBits(DO_SD_CS_GPIO,DO_SD_CS);
//define DO for data flash
#define DO_DF_CS_GPIO							GPIOA
#define DO_DF_CS									GPIO_Pin_15
#define DF_SELECT()								GPIO_ResetBits(DO_DF_CS_GPIO,DO_DF_CS);
#define DF_UNSELECT()							GPIO_SetBits(DO_DF_CS_GPIO,DO_DF_CS);
//define DO for reserve
#define DO_RESERVE_1_GPIO					GPIOA
#define DO_RESERVE_1							GPIO_Pin_1
#define DO_RESERVE_2_GPIO					GPIOA
#define DO_RESERVE_2							GPIO_Pin_2
//define PWM for speaker
#define PWM_SPEAKER_GPIO					GPIOA
#define PWM_SPEKEAR								GPIO_Pin_9
//define EXTIN for pulse counter
#define EXT_INT_COUNTER_GPIO			GPIOA
#define EXT_INT_COUNTER						GPIO_Pin_12

#ifdef __cplusplus
}
#endif

#endif /* __MISC_H */

